#ifndef QTVTKMAINWINDOW_H
#define QTVTKMAINWINDOW_H

// Qt inlcudes
#include <QtGui/QMainWindow>
#include "ui_qtvtkmainwindow.h"
#include <QFileDialog>
#include <QFileInfo>
#include <QList>
#include <QStringList>
//#include "QVTKWidget.h"
#include "qtvtkbodyproperties.h"
#include "qtvtkregistrationutility.h"

// VTK includes
#include "vtkmethods.h"
#include "vtkscene.h"

// OpenSim includes
#include "osimsimulation.h"
//#include "osimkneemodel.h"

class QtVTKMainWindow : public QMainWindow
{
	Q_OBJECT

public:
	
	QtVTKMainWindow(QWidget *parent = 0, Qt::WFlags flags = 0);
	~QtVTKMainWindow();
	vtkMethods::vtkScene vtkSceneManager;
	osimMethods::osimSimulation osimManager;

public slots:

	// File Menu
	void on_actionBlank_Model_activated(void);
	void on_actionKnee_Model_activated(void);
	void on_actionOpen_Model_activated(void);
	void on_actionSave_Model_As_activated(void);
	void on_actionQuit_activated(void);

	// Model Menu
	void on_actionBody_activated(void);
	void on_actionJoint_activated(void);
	void on_actionConstraint_activated(void);
	void on_actionContact_Geometry_activated(void);
	void on_actionForce_activated(void);
	void on_actionMarker_activated(void);

	// Analysis Menu
	void on_actionRegistration_activated(void);

private:

	Ui::QtVTKMainWindowClass ui;

	// Tree items
	QList<QTreeWidgetItem> BodiesTreeList;
	QList<QTreeWidgetItem> JointsTreeList;
	QList<QTreeWidgetItem> ConstraintsTreeList;
	QList<QTreeWidgetItem> ContactGeometryTreeList;
	QList<QTreeWidgetItem> ForcesTreeList;
	QList<QTreeWidgetItem> MarkersTreeList;

	// Update Tree List
	void updateTreeList(std::map<int,std::map<int,std::string>>);

};

#endif // QTVTKMAINWINDOW_H
